package com.skycan.plc.adapter.model;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 控制命令
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ControlCommand {
    /**
     * 设备唯一标识
     */
    private String deviceId;

    /**
     * 命令ID
     */
    private String commandId;

    /**
     * 控制点类型
     */
    private DataPoint.DataType type;

    /**
     * 设备寄存器地址
     */
    private String address;

    /**
     * 控制值
     */
    private Object value;

    /**
     * 命令时间戳
     */
    private long timestamp;

    /**
     * 命令状态
     */
    private CommandStatus status;

    /**
     * 命令状态枚举
     */
    public enum CommandStatus {
        PENDING, // 等待执行
        SENT, // 已发送
        COMPLETED, // 已完成
        FAILED // 失败
    }
}